pckTyp:
ldx #0		;intern type
beq unknown	;new packet header
bmi noBump	;only v0/v1 for now
pckEndL:	;any circular buffer (audio/junk)
lda #0
sta tail-2,x
pckEndH:
lda #0
sta tail-2+1,x
cmp bLimit-2+1,x
bne nobump
lda bLimit-2,x	;start of circular
sta tail-2+1,x	;reset / wrap

noBump:
ldx muxHead
cpx muxTail
bcc useMuxBuf
(Load Que empty)
ldx #0		;reset muxBuff
stx pckTyp+1	;type unknown
lda #>muxBuff
stx muxBuff	;adrs low
sta muxBuff+1	;adrs high
lda #4		;packet hdr size
sta muxBuff+2
stx muxBuff+3	;len high
stx muxHead	;start beginning
sta muxTail	;set end

useMuxBuf:	;x=muxhead
lda muxBuf,x
sta ldAdrLo
lda muxBuf+1,x
sta ldAdrHi
lda muxBuf+3,x
sta lenHi
lda muxBuf+2,x
sta lenLo
clc
adc ldAdrLo
sta pckEndL+1
lda lenHi
adc ldAdrHi
sta pckEndH+1
bit pckTyp+1
bmi go
lda #0
sec
sbc pckEndL+1
sta muxBuf+2,x
lda pckEndH+1
sbc buffLimit
sta muxBuf+3,x
bcc chkFull
bne fix
clc
lda pckEndL+1
beq chkFull
sec
fix:
lda #0
sta pckEndL+1
sbc ldAdrLo
sta lenLo
lda buffLimit
sta pckEndH+1
sbc ldAdrHi
sta lenHi
chkFull:
lda pckTyp+1
eor #typeJunk
beq notFull+1
php		;save single or multi load
sec
lda getSamp+1	;modify for audio2 / subtitle
sbc pckEndL+1
lda getSamp+2	;modify for audio2 / subtitle
sbc pckEndH+1
bcs notFull
sec
lda muxBuff
sbc getSamp+1	;modify for audio2 / subtitle
lda muxBuff+1
sbc getSamp+2	;modify for audio2 / subtitle
bcs notFull
plp
jmp block
notFull:
plp
;bcc go
bcs go2
/* limitJunk:
lda lenHi
beq go
lsr
bne fixJ
lda lenLo
beq go
fixJ:
lda #0
sta lenLo
sta pckEndL+1
lda #1
sta lenHi
lda #>limitJunk
sta pckEndH+1
dec muxBuf+3,x
bne go2		*/

go:
txa
clc
adc #4
sta muxHead
go2:
start ldr
block:
rti

unknown:	;x=0, muxTail==4
stx muxHead	;reset muxBuff
lda muxBuff
cmp #$56
bne tryA
;Vx
lda muxBuff+1
cmp #$30
bne tryV1
lda #$ff
sta pckTyp+1
lda #vidHead	; $10; could use 4...
sta muxBuff	;ld adrs low
lda #>muxBuff
sta muxBuff+1	;ld adrs high
lda muxBuff+3	;size high
bne errJunk
lda muxBuff+2	;size low
cmp #256-vidHead
bcc useMuxBuff
lda #4		;magenta
.byt $2c

v1err:
lda #2		;red

errJunk:
sta $d020
Junk:
ldx #04		;unknown
bne setCircAdr

tryA:
cmp #$41
bne Junk
lda muxBuff+1
cmp #$31
bne Junk
ldx #2		;audio, cicular buffer
setCircAdr:
stx pckTyp+1
lda tail-2,x
sta muxBuff
lda tail-2+1,x
sta muxBuff+1
lda bLimit-2+1,x
sta buffLimit
ldx #0
beq useMuxBuff

tryV1:
cmp #$31
bne Junk
lda #$fe
sta pckTyp+1
ldx vidTail
beq block
lda #0
sta muxHead	;chksum low
sta muxTail	;high
chkVsize:
lda vidQue-2,x
clc
adc muxHead
sta muxHead
lda vidQue-3,x
adc muxTail
sta muxTail
txa
sec
sbc #4
tax
bne chkVsize
lda muxHead
cmp muxBuff+2
bne v1err
lda muxTail
cmp muxBuff+3
bne v1err
lda vidTail
adc #vidHead-1
sta muxTail
ldx #vidHead
bne useMuxBuff

=================

loader...
lda $dc0c
sta memory	;BIT if status byte
dec bsOur
beq except	;estat / ebump
...
except:
sta exA+1
lda #bitzp
sta chkA
sta chkA
sta chkA
cli
txa
pha
bit wrtA
bpl endChk

exA:
lda #0
and #e
cmp #2
bcs err
lda #254
sta bSect
sec
jmp sizChk2

endChk:
lda pklenH
ora pklenL
beq endPckt

endSect:
lda #1
sta bsOur
lda #BIT
sta wrtA
sta wrtF
bne resume

ReQue...
sizChk:
lda bSect
beq endSect
lda sAdr+1
sta sWrt+2
sta fWrt+2
lda sAdr
sta sWrt+1
sta fWrt+1
clc
adc bSect
sta sAdr
bcc nxt
inc sAdr+1

lda pklenL
sbc bSect
tax
lda pklenH
sbc #0
bcc alt
sta pklenH
lda bSect
sta bSour
lda #0
bcs do
alt:
lda pklenL
sta bsOur
txa
eor #$ff
adc #1
ldx #0
do:
sta bSect
stx pklenL

resume:
lda #BNE
sta chkA
sta chkB
sta chkC
inc ilock
rts

